iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 22
0
自我挑戰組

golang初探系列 第 22

day22-Error

  • 分享至 

  • xImage
  •  

day20-defer 及 錯誤處理 章節中有提到錯誤的處理.
使用 panic 會導致程式碼崩潰,優美的處理方式是回傳 error

Error

可以使用 errors package 來創建 error

package main

import (
	"errors"
	"fmt"
)

func main() {
	fmt.Println(readConf("config.ini"))
	fmt.Println(readConf("config_test.ini"))
}

func readConf(name string) error {
	if name == "config.ini" {
		return nil
	} else {
		//可以使用 errors package
		return errors.New("讀取文件錯誤")
	}
}

自定義 Error

error type 是一個 interface,只需 implement Error method 並回傳 string 類型,就符合 error 類型

package main

import (
	"encoding/json"
	"fmt"
)

type ApiError struct {
	Code    int    `json:"code"`
	Message string `json:"message"`
}

func (a ApiError) Error() string {
    //後續章節會提到如何將 struct 轉成 json格式
	message, _ := json.Marshal(a)

	return string(message)
}

func main() {
	fmt.Println(readConf("config.ini"))
	fmt.Println(readConf("config_test.ini"))
}

func readConf(name string) (err error) {
	if name == "config.ini" {
		return nil
	} else {
		err = ApiError{
			Code:    10000,
			Message: "讀取文件錯誤",
		}
		return err
	}
}


上一篇
day21-Interface 及 Type Assertions
下一篇
day23-Goroutine
系列文
golang初探30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言